using System.IO; // 引入 IO 命名空间，用于文件操作
using UnityEngine;
using UnityEngine.Events;

public static class SaveLoad 
{
    public static UnityAction OnSaveGame; // 定义保存游戏成功事件
    public static UnityAction<SaveData> OnLoadGame; // 定义加载游戏成功事件

    private static string directory = "/SaveData/"; // 存档目录
    private static string fileName = "SaveGame.sav"; // 存档文件名

    public static bool Save(SaveData data)
    {
        // 触发保存游戏成功事件
        OnSaveGame?.Invoke();

        // 构造存档文件的完整路径
        string dir = Application.persistentDataPath + directory;

        //保存后路径会复制进我们的粘贴板，方便我们查找数据路径
        GUIUtility.systemCopyBuffer = dir;

        // 如果存档目录不存在，就创建它
        if (!Directory.Exists(dir))
        {
            Directory.CreateDirectory(dir);
        }
        // 把 SaveData 对象序列化成 JSON 格式的字符串
        string json = JsonUtility.ToJson(data, true);
        // 把 JSON 字符串写入存档文件
        File.WriteAllText(dir + fileName, json);
        Debug.Log("Saving game"); // 输出日志，表示正在保存游戏
        return true; // 返回保存成功
    }

    public static SaveData Load()
    {
        // 构造存档文件的完整路径
        string fullPath = Application.persistentDataPath + directory + fileName;
        // 如果存档文件不存在，返回 null
        if (!File.Exists(fullPath))
        {
            return null;
        }
        // 从存档文件中读取 JSON 字符串
        string json = File.ReadAllText(fullPath);
        // 把 JSON 字符串反序列化成 SaveData 类型的对象
        SaveData data = JsonUtility.FromJson<SaveData>(json);
        // 触发加载游戏成功事件
        OnLoadGame?.Invoke(data);
        return data; // 返回读取到的 SaveData 对象
    }

    //删除保存的游戏数据
    public static void DeleteSaveData(){
        string fullPath = Application.persistentDataPath + directory + fileName;
        if (File.Exists(fullPath)) File.Delete(fullPath);
        Debug.Log("Delete game"); // 输出日志，表示正在保存游戏
    }
}